
typedef enum
{
	AARCH64_CC,
	AARCH64_R0,
	AARCH64_R1,
	AARCH64_R2,
	AARCH64_R3,
	AARCH64_R4,
	AARCH64_R5,
	AARCH64_R6,
	AARCH64_R7,
	AARCH64_R8,
	AARCH64_R9,
	AARCH64_R10,
	AARCH64_R11,
	AARCH64_R12,
	AARCH64_R13,
	AARCH64_R14,
	AARCH64_R15,
	AARCH64_R16,
	AARCH64_R17,
	AARCH64_R18,
	AARCH64_R19,
	AARCH64_R20,
	AARCH64_R21,
	AARCH64_R22,
	AARCH64_R23,
	AARCH64_R24,
	AARCH64_R25,
	AARCH64_R26,
	AARCH64_R27,
	AARCH64_R28,
	AARCH64_R29,
	AARCH64_R30,
	AARCH64_R31,
	AARCH64_Q0,
	AARCH64_Q1,
	AARCH64_Q2,
	AARCH64_Q3,
	AARCH64_Q4,
	AARCH64_Q5,
	AARCH64_Q6,
	AARCH64_Q7,
	AARCH64_Q8,
	AARCH64_Q9,
	AARCH64_Q10,
	AARCH64_Q11,
	AARCH64_Q12,
	AARCH64_Q13,
	AARCH64_Q14,
	AARCH64_Q15,
	AARCH64_Q16,
	AARCH64_Q17,
	AARCH64_Q18,
	AARCH64_Q19,
	AARCH64_Q20,
	AARCH64_Q21,
	AARCH64_Q22,
	AARCH64_Q23,
	AARCH64_Q24,
	AARCH64_Q25,
	AARCH64_Q26,
	AARCH64_Q27,
	AARCH64_Q28,
	AARCH64_Q29,
	AARCH64_Q30,
	AARCH64_Q31,
	AARCH64_FIRST_RV_CLOBBER,
	AARCH64_V0 = AARCH64_FIRST_RV_CLOBBER,
	AARCH64_V1,
	AARCH64_V2,
	AARCH64_V3,
	AARCH64_V4,
	AARCH64_V5,
	AARCH64_V6,
	AARCH64_V7,
	AARCH64_V8,
	AARCH64_V9,
	AARCH64_V10,
	AARCH64_V11,
	AARCH64_V12,
	AARCH64_V13,
	AARCH64_V14,
	AARCH64_V15,
	AARCH64_V16,
	AARCH64_V17,
	AARCH64_V18,
	AARCH64_V19,
	AARCH64_V20,
	AARCH64_V21,
	AARCH64_V22,
	AARCH64_V23,
	AARCH64_V24,
	AARCH64_V25,
	AARCH64_V26,
	AARCH64_V27,
	AARCH64_V28,
	AARCH64_V29,
	AARCH64_V30,
	AARCH64_V31,
} Aarch64Clobbers;

static const char *Aarch64ClobberNames[] = {
		[AARCH64_CC] = "cc",
		[AARCH64_R0] = "r0",
		[AARCH64_R1] = "r1",
		[AARCH64_R2] = "r2",
		[AARCH64_R3] = "r3",
		[AARCH64_R4] = "r4",
		[AARCH64_R5] = "r5",
		[AARCH64_R6] = "r6",
		[AARCH64_R7] = "r7",
		[AARCH64_R8] = "r8",
		[AARCH64_R9] = "r9",
		[AARCH64_R10] = "r10",
		[AARCH64_R11] = "r11",
		[AARCH64_R12] = "r12",
		[AARCH64_R13] = "r13",
		[AARCH64_R14] = "r14",
		[AARCH64_R15] = "r15",
		[AARCH64_R16] = "r16",
		[AARCH64_R17] = "r17",
		[AARCH64_R18] = "r18",
		[AARCH64_R19] = "r19",
		[AARCH64_R20] = "r20",
		[AARCH64_R21] = "r21",
		[AARCH64_R22] = "r22",
		[AARCH64_R23] = "r23",
		[AARCH64_R24] = "r24",
		[AARCH64_R25] = "r25",
		[AARCH64_R26] = "r26",
		[AARCH64_R27] = "r27",
		[AARCH64_R28] = "r28",
		[AARCH64_R29] = "r29",
		[AARCH64_R30] = "r30",
		[AARCH64_R31] = "r31",
		[AARCH64_Q0] = "q0",
		[AARCH64_Q1] = "q1",
		[AARCH64_Q2] = "q2",
		[AARCH64_Q3] = "q3",
		[AARCH64_Q4] = "q4",
		[AARCH64_Q5] = "q5",
		[AARCH64_Q6] = "q6",
		[AARCH64_Q7] = "q7",
		[AARCH64_Q8] = "q8",
		[AARCH64_Q9] = "q9",
		[AARCH64_Q10] = "q10",
		[AARCH64_Q11] = "q11",
		[AARCH64_Q12] = "q12",
		[AARCH64_Q13] = "q13",
		[AARCH64_Q14] = "q14",
		[AARCH64_Q15] = "q15",
		[AARCH64_Q16] = "q16",
		[AARCH64_Q17] = "q17",
		[AARCH64_Q18] = "q18",
		[AARCH64_Q19] = "q19",
		[AARCH64_Q20] = "q20",
		[AARCH64_Q21] = "q21",
		[AARCH64_Q22] = "q22",
		[AARCH64_Q23] = "q23",
		[AARCH64_Q24] = "q24",
		[AARCH64_Q25] = "q25",
		[AARCH64_Q26] = "q26",
		[AARCH64_Q27] = "q27",
		[AARCH64_Q28] = "q28",
		[AARCH64_Q29] = "q29",
		[AARCH64_Q30] = "q30",
		[AARCH64_Q31] = "q31",
		[AARCH64_V0] = "v0",
		[AARCH64_V1] = "v1",
		[AARCH64_V2] = "v2",
		[AARCH64_V3] = "v3",
		[AARCH64_V4] = "v4",
		[AARCH64_V5] = "v5",
		[AARCH64_V6] = "v6",
		[AARCH64_V7] = "v7",
		[AARCH64_V8] = "v8",
		[AARCH64_V9] = "v9",
		[AARCH64_V10] = "v10",
		[AARCH64_V11] = "v11",
		[AARCH64_V12] = "v12",
		[AARCH64_V13] = "v13",
		[AARCH64_V14] = "v14",
		[AARCH64_V15] = "v15",
		[AARCH64_V16] = "v16",
		[AARCH64_V17] = "v17",
		[AARCH64_V18] = "v18",
		[AARCH64_V19] = "v19",
		[AARCH64_V20] = "v20",
		[AARCH64_V21] = "v21",
		[AARCH64_V22] = "v22",
		[AARCH64_V23] = "v23",
		[AARCH64_V24] = "v24",
		[AARCH64_V25] = "v25",
		[AARCH64_V26] = "v26",
		[AARCH64_V27] = "v27",
		[AARCH64_V28] = "v28",
		[AARCH64_V29] = "v29",
		[AARCH64_V30] = "v30",
		[AARCH64_V31] = "v31"
};

static const char *aarch64_quad_regs[] = { "$x0", "$x1", "$x2", "$x3", "$x4",
										   "$x5", "$x6", "$x7", "$x8", "$x9",
										   "$x10", "$x11", "$x12", "$x13", "$x14",
										   "$x15", "$x16", "$x17", "$x18", "$x19",
										   "$x20", "$x21", "$x22", "$x23", "$x24",
										   "$x25", "$x26", "$x27", "$x28", "$x29",
										   "$x30", "$xzr" };
static const char *aarch64_long_regs[] = { "$w0", "$w1", "$w2", "$w3", "$w4",
										   "$w5", "$w6", "$w7", "$w8", "$w9",
										   "$w10", "$w11", "$w12", "$w13", "$w14",
										   "$w15", "$w16", "$w17", "$w18", "$w19",
										   "$w20", "$w21", "$w22", "$w23", "$w24",
										   "$w25", "$w26", "$w27", "$w28", "$w29",
										   "$w30", "$wzr" };
static const char *aarch64_f128_regs[] = { "$q0", "$q1", "$q2", "$q3", "$q4",
										   "$q5", "$q6", "$q7", "$q8", "$q9",
										   "$q10", "$q11", "$q12", "$q13", "$q14",
										   "$q15", "$q16", "$q17", "$q18", "$q19",
										   "$q20", "$q21", "$q22", "$q23", "$q24",
										   "$q25", "$q26", "$q27", "$q28", "$q29",
										   "$q30", "$q31" };
static const char *aarch64_double_regs[] = { "$d0", "$d1", "$d2", "$d3", "$d4",
										   "$d5", "$d6", "$d7", "$d8", "$d9",
										   "$d10", "$d11", "$d12", "$d13", "$d14",
										   "$d15", "$d16", "$d17", "$d18", "$d19",
										   "$d20", "$d21", "$d22", "$d23", "$d24",
										   "$d25", "$d26", "$d27", "$d28", "$d29",
										   "$d30", "$d31" };
static const char *aarch64_float_regs[] = { "$s0", "$s1", "$s2", "$s3", "$s4",
											"$s5", "$s6", "$s7", "$s8", "$s9",
											"$s10", "$s11", "$s12", "$s13", "$s14",
											"$s15", "$s16", "$s17", "$s18", "$s19",
											"$s20", "$s21", "$s22", "$s23", "$s24",
											"$s25", "$s26", "$s27", "$s28", "$s29",
											"$s30", "$s31" };
static const char *aarch64_f16_regs[] = { "$h0", "$h1", "$h2", "$h3", "$h4",
										  "$h5", "$h6", "$h7", "$h8", "$h9",
										  "$h10", "$h11", "$h12", "$h13", "$h14",
										  "$h15", "$h16", "$h17", "$h18", "$h19",
										  "$h20", "$h21", "$h22", "$h23", "$h24",
										  "$h25", "$h26", "$h27", "$h28", "$h29",
										  "$h30", "$h31" };
static const char *aarch64_f8_regs[] = { "$b0", "$b1", "$b2", "$b3", "$b4",
										 "$b5", "$b6", "$b7", "$b8", "$b9",
										 "$b10", "$b11", "$b12", "$b13", "$b14",
										 "$b15", "$b16", "$b17", "$b18", "$b19",
										 "$b20", "$b21", "$b22", "$b23", "$b24",
										 "$b25", "$b26", "$b27", "$b28", "$b29",
										 "$b30", "$b31" };
static const char *aarch64_v8b_regs[] = { "$v0_8b", "$v1_8b", "$v2_8b", "$v3_8b", "$v4_8b",
										 "$v5_8b", "$v6_8b", "$v7_8b", "$v8_8b", "$v9_8b",
										 "$v10_8b", "$v11_8b", "$v12_8b", "$v13_8b", "$v14_8b",
										 "$v15_8b", "$v16_8b", "$v17_8b", "$v18_8b", "$v19_8b",
										 "$v20_8b", "$v21_8b", "$v22_8b", "$v23_8b", "$v24_8b",
										 "$v25_8b", "$v26_8b", "$v27_8b", "$v28_8b", "$v29_8b",
										 "$v30_8b", "$v31_8b" };
static const char *aarch64_v16b_regs[] = { "$v0_16b", "$v1_16b", "$v2_16b", "$v3_16b", "$v4_16b",
										  "$v5_16b", "$v6_16b", "$v7_16b", "$v8_16b", "$v9_16b",
										  "$v10_16b", "$v11_16b", "$v12_16b", "$v13_16b", "$v14_16b",
										  "$v15_16b", "$v16_16b", "$v17_16b", "$v18_16b", "$v19_16b",
										  "$v20_16b", "$v21_16b", "$v22_16b", "$v23_16b", "$v24_16b",
										  "$v25_16b", "$v26_16b", "$v27_16b", "$v28_16b", "$v29_16b",
										  "$v30_16b", "$v31_16b" };
static const char *aarch64_v4h_regs[] = { "$v0_4h", "$v1_4h", "$v2_4h", "$v3_4h", "$v4_4h",
										  "$v5_4h", "$v6_4h", "$v7_4h", "$v8_4h", "$v9_4h",
										  "$v10_4h", "$v11_4h", "$v12_4h", "$v13_4h", "$v14_4h",
										  "$v15_4h", "$v16_4h", "$v17_4h", "$v18_4h", "$v19_4h",
										  "$v20_4h", "$v21_4h", "$v22_4h", "$v23_4h", "$v24_4h",
										  "$v25_4h", "$v26_4h", "$v27_4h", "$v28_4h", "$v29_4h",
										  "$v30_4h", "$v31_4h" };
static const char *aarch64_v8h_regs[] = { "$v0_8h", "$v1_8h", "$v2_8h", "$v3_8h", "$v4_8h",
										  "$v5_8h", "$v6_8h", "$v7_8h", "$v8_8h", "$v9_8h",
										  "$v10_8h", "$v11_8h", "$v12_8h", "$v13_8h", "$v14_8h",
										  "$v15_8h", "$v16_8h", "$v17_8h", "$v18_8h", "$v19_8h",
										  "$v20_8h", "$v21_8h", "$v22_8h", "$v23_8h", "$v24_8h",
										  "$v25_8h", "$v26_8h", "$v27_8h", "$v28_8h", "$v29_8h",
										  "$v30_8h", "$v31_8h" };
static const char *aarch64_v2s_regs[] = { "$v0_2s", "$v1_2s", "$v2_2s", "$v3_2s", "$v4_2s",
										  "$v5_2s", "$v6_2s", "$v7_2s", "$v8_2s", "$v9_2s",
										  "$v10_2s", "$v11_2s", "$v12_2s", "$v13_2s", "$v14_2s",
										  "$v15_2s", "$v16_2s", "$v17_2s", "$v18_2s", "$v19_2s",
										  "$v20_2s", "$v21_2s", "$v22_2s", "$v23_2s", "$v24_2s",
										  "$v25_2s", "$v26_2s", "$v27_2s", "$v28_2s", "$v29_2s",
										  "$v30_2s", "$v31_2s" };
static const char *aarch64_v4s_regs[] = { "$v0_4s", "$v1_4s", "$v2_4s", "$v3_4s", "$v4_4s",
										  "$v5_4s", "$v6_4s", "$v7_4s", "$v8_4s", "$v9_4s",
										  "$v10_4s", "$v11_4s", "$v12_4s", "$v13_4s", "$v14_4s",
										  "$v15_4s", "$v16_4s", "$v17_4s", "$v18_4s", "$v19_4s",
										  "$v20_4s", "$v21_4s", "$v22_4s", "$v23_4s", "$v24_4s",
										  "$v25_4s", "$v26_4s", "$v27_4s", "$v28_4s", "$v29_4s",
										  "$v30_4s", "$v31_4s" };
static const char *aarch64_v1d_regs[] = { "$v0_1d", "$v1_1d", "$v2_1d", "$v3_1d", "$v4_1d",
										  "$v5_1d", "$v6_1d", "$v7_1d", "$v8_1d", "$v9_1d",
										  "$v10_1d", "$v11_1d", "$v12_1d", "$v13_1d", "$v14_1d",
										  "$v15_1d", "$v16_1d", "$v17_1d", "$v18_1d", "$v19_1d",
										  "$v20_1d", "$v21_1d", "$v22_1d", "$v23_1d", "$v24_1d",
										  "$v25_1d", "$v26_1d", "$v27_1d", "$v28_1d", "$v29_1d",
										  "$v30_1d", "$v31_1d" };
static const char *aarch64_v2d_regs[] = { "$v0_2d", "$v1_2d", "$v2_2d", "$v3_2d", "$v4_2d",
										  "$v5_2d", "$v6_2d", "$v7_2d", "$v8_2d", "$v9_2d",
										  "$v10_2d", "$v11_2d", "$v12_2d", "$v13_2d", "$v14_2d",
										  "$v15_2d", "$v16_2d", "$v17_2d", "$v18_2d", "$v19_2d",
										  "$v20_2d", "$v21_2d", "$v22_2d", "$v23_2d", "$v24_2d",
										  "$v25_2d", "$v26_2d", "$v27_2d", "$v28_2d", "$v29_2d",
										  "$v30_2d", "$v31_2d" };